//
// Copyright 2010-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License").
// You may not use this file except in compliance with the License.
// A copy of the License is located at
//
// http://aws.amazon.com/apache2.0
//
// or in the "license" file accompanying this file. This file is distributed
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
// express or implied. See the License for the specific language governing
// permissions and limitations under the License.
//

// ############################################################################
// Auto-generated file. Do not edit this file manually
// ############################################################################

import Foundation
import AWSCore

/// Credentials provider for the various tests. Keys and tokens are hardcoded in the `generate_swift_test_cases` script
struct SigV4TestCredentials {
    static let regionName = "us-east-1"
    static let serviceName = "service"

    // 20150830T123600Z
    static let testDate = Date(timeIntervalSince1970: 1440938160)
    static let expiry: Int32 = 86400

    static let basicTestCredentials = AWSStaticCredentialsProvider(accessKey: "AKIDEXAMPLE",
                                                                   secretKey: "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY")

    static let sessionTestCredentials = AWSBasicSessionCredentialsProvider(accessKey: "AKIDEXAMPLE",
                                                                           secretKey: "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY",
                                                                           sessionToken: "AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==")

}

struct SigV4PresignedURLTestCases {
    static let allCases = [


// MARK: - Test Case "get-vanilla-utf8-query"

SigV4TestCase(

testCaseName: "get-vanilla-utf8-query",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET /?%E1%88%B4=bar HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?%E1%88%B4=bar&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=100714066184b71b6bb2ad12da83b0a1937bd278677d3170eb7daa17b74eca28",

canonicalRequest:
"""
GET
/
%E1%88%B4=bar&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
e79799dc9389e904799234983f562a6e76d938404d78efa97ce713ba5291bd05
""",

signature:
"""
100714066184b71b6bb2ad12da83b0a1937bd278677d3170eb7daa17b74eca28
"""
),


// MARK: - Test Case "get-vanilla-query-order-key-case"

SigV4TestCase(

testCaseName: "get-vanilla-query-order-key-case",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET /?Param2=value2&Param1=value1 HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?Param2=value2&Param1=value1&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=b95b3cbdad52a7c3456e03c0fef8240796b8b2016d170b7b78c055a67f516df8",

canonicalRequest:
"""
GET
/
Param1=value1&Param2=value2&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
498c8d97a047f7f969aa910fbdb51e7718840df0a99f26143209fcc599be1cbc
""",

signature:
"""
b95b3cbdad52a7c3456e03c0fef8240796b8b2016d170b7b78c055a67f516df8
"""
),


// MARK: - Test Case "get-header-value-trim"

SigV4TestCase(

testCaseName: "get-header-value-trim",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET / HTTP/1.1
Host:example.amazonaws.com
My-Header1: value1
My-Header2: "a   b   c"
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bmy-header1%3Bmy-header2%3Bx-amz-date&X-Amz-Signature=fad9a97a21823f33f5e77965ab1227e4e120b706fee5258f41bd72db4ebcdb54",

canonicalRequest:
"""
GET
/
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bmy-header1%3Bmy-header2%3Bx-amz-date
host:example.amazonaws.com
my-header1:value1
my-header2:"a b c"
x-amz-date:20150830T123600Z

host;my-header1;my-header2;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
9ebb2e8c17bdfe84745bb35e086fa2d416567e05df3159dd9b297cd68d7fdb22
""",

signature:
"""
fad9a97a21823f33f5e77965ab1227e4e120b706fee5258f41bd72db4ebcdb54
"""
),


// MARK: - Test Case "get-vanilla-query-unreserved"

SigV4TestCase(

testCaseName: "get-vanilla-query-unreserved",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET /?-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz=-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz=-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=9175c40e763100d99a0091b360f22be3c0e0c8edffe9353b7a8df8f3217e4588",

canonicalRequest:
"""
GET
/
-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz=-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
17fd7445f93cc60fa8e802462212f7f99a0bee743e9f27a9132d42968d09ff0f
""",

signature:
"""
9175c40e763100d99a0091b360f22be3c0e0c8edffe9353b7a8df8f3217e4588
"""
),


// MARK: - Test Case "get-vanilla-query-order-key"

SigV4TestCase(

testCaseName: "get-vanilla-query-order-key",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET /?Param1=value2&Param1=Value1 HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?Param1=value2&Param1=Value1&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=dedef9f297faf89b0267dde658b3890d47515e6fcaab744b7d8b4720b67fbea2",

canonicalRequest:
"""
GET
/
Param1=Value1&Param1=value2&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
3c2906771cdb27453e76eb312a5795dbd6608776037d75478bf1ed5108aa91af
""",

signature:
"""
dedef9f297faf89b0267dde658b3890d47515e6fcaab744b7d8b4720b67fbea2
"""
),


// MARK: - Test Case "get-vanilla"

SigV4TestCase(

testCaseName: "get-vanilla",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET / HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=b92f41f31e31097d2079a5b3ffaf9fb0248c76a84287521dd189b32e9df08077",

canonicalRequest:
"""
GET
/
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
e05d937da66337240cd15474a0b913d60b0f88f403d2de9e3d9d5f419fa68fc1
""",

signature:
"""
b92f41f31e31097d2079a5b3ffaf9fb0248c76a84287521dd189b32e9df08077
"""
),


// MARK: - Test Case "post-sts-header-after"

SigV4TestCase(

testCaseName: "post-sts-header-after",

// Given

credentialsProvider: SigV4TestCredentials.sessionTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
POST / HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Security-Token=AQoDYXdzEPT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI%2FqkPpKPi%2FkMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d%2Bxo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz%2BscqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR%2FoLxBA%3D%3D&X-Amz-Signature=702070c2bc54d794febfc27b5691bbc43d8c916ea8e6cdd2eeb48828030145e0",

canonicalRequest:
"""
POST
/
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
92ddfa709af30e239a0ed017af5de49406192689dd8287e34b26a0679c6b41b8
""",

signature:
"""
702070c2bc54d794febfc27b5691bbc43d8c916ea8e6cdd2eeb48828030145e0
"""
),


// MARK: - Test Case "post-sts-header-before"

SigV4TestCase(

testCaseName: "post-sts-header-before",

// Given

credentialsProvider: SigV4TestCredentials.sessionTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: true,

// When
originalRequest:
"""
POST / HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
X-Amz-Security-Token:AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date%3Bx-amz-security-token&X-Amz-Security-Token=AQoDYXdzEPT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI%2FqkPpKPi%2FkMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d%2Bxo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz%2BscqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR%2FoLxBA%3D%3D&X-Amz-Signature=1ec135464261b94ab39964bd3339c62e72b9258fb19a2a4d06373977a036056c",

canonicalRequest:
"""
POST
/
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-Security-Token=AQoDYXdzEPT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI%2FqkPpKPi%2FkMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d%2Bxo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz%2BscqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR%2FoLxBA%3D%3D&X-Amz-SignedHeaders=host%3Bx-amz-date%3Bx-amz-security-token
host:example.amazonaws.com
x-amz-date:20150830T123600Z
x-amz-security-token:AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==

host;x-amz-date;x-amz-security-token
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
1cfcb94ca37b059782393f1b607fa21871a45e5d44f4df29d1e00ca1110bddc1
""",

signature:
"""
1ec135464261b94ab39964bd3339c62e72b9258fb19a2a4d06373977a036056c
"""
),


// MARK: - Test Case "get-unreserved"

SigV4TestCase(

testCaseName: "get-unreserved",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET /-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=43b77075b9bc92a6296cf7ac6b9d781199beae4526897c3cdf2d9647a3b13c47",

canonicalRequest:
"""
GET
/-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
c1edb283e8792becbe1b79f144ed88707ba049b6acfa379053ecdc5337673846
""",

signature:
"""
43b77075b9bc92a6296cf7ac6b9d781199beae4526897c3cdf2d9647a3b13c47
"""
),


// MARK: - Test Case "get-header-value-multiline"

SigV4TestCase(

testCaseName: "get-header-value-multiline",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET / HTTP/1.1
Host:example.amazonaws.com
My-Header1:value1
  value2
     value3
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bmy-header1%3Bx-amz-date&X-Amz-Signature=69bae9a597bc95816efeb37599dc10562264fbe251de4794e5ac9d170f9c50cd",

canonicalRequest:
"""
GET
/
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bmy-header1%3Bx-amz-date
host:example.amazonaws.com
my-header1:value1 value2 value3
x-amz-date:20150830T123600Z

host;my-header1;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
b665e38bb8a24de60542b07413f907e2e6dd2f4feca0c707169f4e4cf9986333
""",

signature:
"""
69bae9a597bc95816efeb37599dc10562264fbe251de4794e5ac9d170f9c50cd
"""
),


// MARK: - Test Case "post-x-www-form-urlencoded-parameters"

SigV4TestCase(

testCaseName: "post-x-www-form-urlencoded-parameters",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
POST / HTTP/1.1
Content-Type:application/x-www-form-urlencoded; charset=utf-8
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
Content-Length:13

Param1=value1
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=content-length%3Bcontent-type%3Bhost%3Bx-amz-date&X-Amz-Signature=9ec22502e002a6ae9d84414a2b6f57df4a82f3bdd2cfcb85b8aa41c7ac9d4b00",

canonicalRequest:
"""
POST
/
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=content-length%3Bcontent-type%3Bhost%3Bx-amz-date
content-length:13
content-type:application/x-www-form-urlencoded; charset=utf-8
host:example.amazonaws.com
x-amz-date:20150830T123600Z

content-length;content-type;host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
f6407277c96b15a57ef79fa7eee9f8b2fa2540acec7e49331c7191ce2215e3f6
""",

signature:
"""
9ec22502e002a6ae9d84414a2b6f57df4a82f3bdd2cfcb85b8aa41c7ac9d4b00
"""
),


// MARK: - Test Case "post-vanilla"

SigV4TestCase(

testCaseName: "post-vanilla",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
POST / HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=702070c2bc54d794febfc27b5691bbc43d8c916ea8e6cdd2eeb48828030145e0",

canonicalRequest:
"""
POST
/
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
92ddfa709af30e239a0ed017af5de49406192689dd8287e34b26a0679c6b41b8
""",

signature:
"""
702070c2bc54d794febfc27b5691bbc43d8c916ea8e6cdd2eeb48828030145e0
"""
),


// MARK: - Test Case "post-x-www-form-urlencoded"

SigV4TestCase(

testCaseName: "post-x-www-form-urlencoded",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
POST / HTTP/1.1
Content-Type:application/x-www-form-urlencoded
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
Content-Length:13

Param1=value1
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=content-length%3Bcontent-type%3Bhost%3Bx-amz-date&X-Amz-Signature=69e59304cf61237c79d4f0c20b02f9bacd2788ef13005119e11c91b7f4683f8c",

canonicalRequest:
"""
POST
/
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=content-length%3Bcontent-type%3Bhost%3Bx-amz-date
content-length:13
content-type:application/x-www-form-urlencoded
host:example.amazonaws.com
x-amz-date:20150830T123600Z

content-length;content-type;host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
3517f5b1516bf11ace6f1e858b9daa61d77134cc23293d6d290a94771e499e26
""",

signature:
"""
69e59304cf61237c79d4f0c20b02f9bacd2788ef13005119e11c91b7f4683f8c
"""
),


// MARK: - Test Case "post-header-key-case"

SigV4TestCase(

testCaseName: "post-header-key-case",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
POST / HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=702070c2bc54d794febfc27b5691bbc43d8c916ea8e6cdd2eeb48828030145e0",

canonicalRequest:
"""
POST
/
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
92ddfa709af30e239a0ed017af5de49406192689dd8287e34b26a0679c6b41b8
""",

signature:
"""
702070c2bc54d794febfc27b5691bbc43d8c916ea8e6cdd2eeb48828030145e0
"""
),


// MARK: - Test Case "get-vanilla-empty-query-key"

SigV4TestCase(

testCaseName: "get-vanilla-empty-query-key",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET /?Param1=value1 HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?Param1=value1&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=e6e471dbfc10fc73772bc4608a88cd405c6767b6e339f6a5a181c6d3de70be87",

canonicalRequest:
"""
GET
/
Param1=value1&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
fd83f4e88674ace574c23aa8dcf3ed11c30760df0413a78727db4d03d8a4c195
""",

signature:
"""
e6e471dbfc10fc73772bc4608a88cd405c6767b6e339f6a5a181c6d3de70be87
"""
),


// MARK: - Test Case "post-header-key-sort"

SigV4TestCase(

testCaseName: "post-header-key-sort",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
POST / HTTP/1.1
Host:example.amazonaws.com
My-Header1:value1
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bmy-header1%3Bx-amz-date&X-Amz-Signature=4c4d2e0b38fe4b6a083d4e90bafe7d6c147842f8f4020ca0f2802aac9f6092c6",

canonicalRequest:
"""
POST
/
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bmy-header1%3Bx-amz-date
host:example.amazonaws.com
my-header1:value1
x-amz-date:20150830T123600Z

host;my-header1;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
9137fad68dc0b678d02ec751ddcd18359ec788a82ebddee014dd8f3bc06175cf
""",

signature:
"""
4c4d2e0b38fe4b6a083d4e90bafe7d6c147842f8f4020ca0f2802aac9f6092c6
"""
),


// MARK: - Test Case "aws-mobile-sdk-get-s3-sample"

SigV4TestCase(

testCaseName: "aws-mobile-sdk-get-s3-sample",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET /test.txt HTTP/1.1
Host:examplebucket.s3.amazonaws.com
""",

// Then
expectedPresignedURL: "https://examplebucket.s3.amazonaws.com/test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=6ba175ef28601c29d857ab02d5b8c165382c7967d143e3998ddf268d157e69a7",

canonicalRequest:
"""
GET
/test.txt
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host
host:examplebucket.s3.amazonaws.com

host
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
8c4631a3c390c6592d07b7964d90d1594610e142fedd8d59195359a2f40656b5
""",

signature:
"""
6ba175ef28601c29d857ab02d5b8c165382c7967d143e3998ddf268d157e69a7
"""
),


// MARK: - Test Case "post-vanilla-empty-query-value"

SigV4TestCase(

testCaseName: "post-vanilla-empty-query-value",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
POST /?Param1=value1 HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?Param1=value1&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=de5e9df474604081e4a8145cbee7da55dee3544f9b5a9bbb5ef2e78ab222c1d0",

canonicalRequest:
"""
POST
/
Param1=value1&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
7e331b0cfb8d054c83e3919fd0429dc4157972b893f57f85d2fd0821c766358c
""",

signature:
"""
de5e9df474604081e4a8145cbee7da55dee3544f9b5a9bbb5ef2e78ab222c1d0
"""
),


// MARK: - Test Case "get-vanilla-query"

SigV4TestCase(

testCaseName: "get-vanilla-query",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET / HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=b92f41f31e31097d2079a5b3ffaf9fb0248c76a84287521dd189b32e9df08077",

canonicalRequest:
"""
GET
/
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
e05d937da66337240cd15474a0b913d60b0f88f403d2de9e3d9d5f419fa68fc1
""",

signature:
"""
b92f41f31e31097d2079a5b3ffaf9fb0248c76a84287521dd189b32e9df08077
"""
),


// MARK: - Test Case "get-header-value-order"

SigV4TestCase(

testCaseName: "get-header-value-order",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET / HTTP/1.1
Host:example.amazonaws.com
My-Header1:value4
My-Header1:value1
My-Header1:value3
My-Header1:value2
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bmy-header1%3Bx-amz-date&X-Amz-Signature=e8dac04aea31d53401ba5041896ed4ba404b0b3ac404e7cb5f7e1a9095f483cf",

canonicalRequest:
"""
GET
/
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bmy-header1%3Bx-amz-date
host:example.amazonaws.com
my-header1:value2
x-amz-date:20150830T123600Z

host;my-header1;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
168d806b614a89e675a196085ded4e4019da0b52aaf431a51b09eacb3b9d2200
""",

signature:
"""
e8dac04aea31d53401ba5041896ed4ba404b0b3ac404e7cb5f7e1a9095f483cf
"""
),


// MARK: - Test Case "post-vanilla-query"

SigV4TestCase(

testCaseName: "post-vanilla-query",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
POST /?Param1=value1 HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?Param1=value1&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=de5e9df474604081e4a8145cbee7da55dee3544f9b5a9bbb5ef2e78ab222c1d0",

canonicalRequest:
"""
POST
/
Param1=value1&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
7e331b0cfb8d054c83e3919fd0429dc4157972b893f57f85d2fd0821c766358c
""",

signature:
"""
de5e9df474604081e4a8145cbee7da55dee3544f9b5a9bbb5ef2e78ab222c1d0
"""
),


// MARK: - Test Case "get-vanilla-query-order-value"

SigV4TestCase(

testCaseName: "get-vanilla-query-order-value",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET /?Param1=value2&Param1=value1 HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?Param1=value2&Param1=value1&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=57947a1745cd6cc9a191c8d9126cf7d387113374f54f3999ff5569bbf88146ff",

canonicalRequest:
"""
GET
/
Param1=value1&Param1=value2&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
e62675cc9f8d427a4ba28c09154dae384369c70718c9dd8b1853ec661068ab07
""",

signature:
"""
57947a1745cd6cc9a191c8d9126cf7d387113374f54f3999ff5569bbf88146ff
"""
),


// MARK: - Test Case "post-header-value-case"

SigV4TestCase(

testCaseName: "post-header-value-case",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
POST / HTTP/1.1
Host:example.amazonaws.com
My-Header1:VALUE1
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bmy-header1%3Bx-amz-date&X-Amz-Signature=ef9ae353fb9e72d4921930e8294664165dfb482ceb4db575a59c1e10aba73772",

canonicalRequest:
"""
POST
/
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bmy-header1%3Bx-amz-date
host:example.amazonaws.com
my-header1:VALUE1
x-amz-date:20150830T123600Z

host;my-header1;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
eef0a61529773600104f2032634137666b6ca736dbb8ca533e7061e6e61a6fa4
""",

signature:
"""
ef9ae353fb9e72d4921930e8294664165dfb482ceb4db575a59c1e10aba73772
"""
),


// MARK: - Test Case "get-slash"

SigV4TestCase(

testCaseName: "get-slash",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET // HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com//?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=36d570f6da55de7197cc6d669ddf8f9490035dfc4a23200ec042b7c73285e2e9",

canonicalRequest:
"""
GET
//
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
6246ea5cfbb72de614580f025d0e2b7073918ee8bfe5e07ac6452bd17303e582
""",

signature:
"""
36d570f6da55de7197cc6d669ddf8f9490035dfc4a23200ec042b7c73285e2e9
"""
),


// MARK: - Test Case "get-slashes"

SigV4TestCase(

testCaseName: "get-slashes",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET //example// HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com//example//?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=400adfd11bfb12a6702db9837b40a8bf6d30c8cb27c8ded4ac37aa9364449b12",

canonicalRequest:
"""
GET
//example//
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
6490cd94b7fe9abc00eaec7b39d5dcd1f73c5bc8cfe024a87846128748dba03b
""",

signature:
"""
400adfd11bfb12a6702db9837b40a8bf6d30c8cb27c8ded4ac37aa9364449b12
"""
),


// MARK: - Test Case "get-relative"

SigV4TestCase(

testCaseName: "get-relative",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET /example/.. HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/example/..?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=da7925d4e2faeaf29ea639c9699c56a5d38e89de54b5a67b9ee1b408b48cb9fe",

canonicalRequest:
"""
GET
/example/..
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
0fd37d9348c48c5df87912ffb8fc4fe077bdc7fd37702920ccb44695070e2b2e
""",

signature:
"""
da7925d4e2faeaf29ea639c9699c56a5d38e89de54b5a67b9ee1b408b48cb9fe
"""
),


// MARK: - Test Case "get-slash-pointless-dot"

SigV4TestCase(

testCaseName: "get-slash-pointless-dot",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET /./example HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/./example?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=a4aabecdf560012e16ab05bccbaca97006ee84bfb9615982f5650e816cac5f91",

canonicalRequest:
"""
GET
/./example
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
c8118cbeeedf4aa038ca59120e09fcdefe9edec4602a70b751d9c290859b893e
""",

signature:
"""
a4aabecdf560012e16ab05bccbaca97006ee84bfb9615982f5650e816cac5f91
"""
),


// MARK: - Test Case "get-slash-dot-slash"

SigV4TestCase(

testCaseName: "get-slash-dot-slash",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET /./ HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/./?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=2f637db15a384845e6eba74baec4fa0c880f3cdf2de66c16c5e31012cc65ee1e",

canonicalRequest:
"""
GET
/./
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
f0b867c5167e66f1dda99dcc567d9b9f4a0772d07f6928736571b554a8b9d5e8
""",

signature:
"""
2f637db15a384845e6eba74baec4fa0c880f3cdf2de66c16c5e31012cc65ee1e
"""
),


// MARK: - Test Case "get-relative-relative"

SigV4TestCase(

testCaseName: "get-relative-relative",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET /example1/example2/../.. HTTP/1.1
Host:example.amazonaws.com
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/example1/example2/../..?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=a10013154ff0535d3d65ea5822c21e28f5821411d345abf9bc8b60f4b8753cba",

canonicalRequest:
"""
GET
/example1/example2/../..
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bx-amz-date
host:example.amazonaws.com
x-amz-date:20150830T123600Z

host;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
75784ebb671cb836e3fbc9a5e26ec254490e415d2e4f6b87fb6f05bded6819e5
""",

signature:
"""
a10013154ff0535d3d65ea5822c21e28f5821411d345abf9bc8b60f4b8753cba
"""
),


// MARK: - Test Case "get-header-key-duplicate"

SigV4TestCase(

testCaseName: "get-header-key-duplicate",

// Given

credentialsProvider: SigV4TestCredentials.basicTestCredentials,

shouldSignBody: false,
shouldSignSecurityToken: false,

// When
originalRequest:
"""
GET / HTTP/1.1
Host:example.amazonaws.com
My-Header1:value2
My-Header1:value2
My-Header1:value1
X-Amz-Date:20150830T123600Z
""",

// Then
expectedPresignedURL: "https://example.amazonaws.com/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bmy-header1%3Bx-amz-date&X-Amz-Signature=85e97ffeac044f345cc5fab027dee6b6e0734b6e7682111d6e168c00dfe2e18a",

canonicalRequest:
"""
GET
/
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fservice%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host%3Bmy-header1%3Bx-amz-date
host:example.amazonaws.com
my-header1:value1
x-amz-date:20150830T123600Z

host;my-header1;x-amz-date
UNSIGNED-PAYLOAD
""",

stringToSign:
"""
AWS4-HMAC-SHA256
20150830T123600Z
20150830/us-east-1/service/aws4_request
1cae8ed14c91694d9a42ca9deac2d3430e8ec09287b44c79a5745acb986f6e36
""",

signature:
"""
85e97ffeac044f345cc5fab027dee6b6e0734b6e7682111d6e168c00dfe2e18a
"""
),


    ]
}
